import java.io.*;
import java.nio.file.*;
import java.nio.charset.StandardCharsets;

public class FileUtil {

    /**
     * 读取文件的指定行
     *
     * @param filePath 文件路径
     * @param lineNumber 要读取的行号（从1开始）
     * @return 指定行的内容，如果文件不存在、行数超出范围或发生IO错误，则返回"无"
     */
    public static String readLineFromFile(String filePath, int lineNumber) {
        File file = new File(filePath);
        if (!file.exists() || !file.isFile()) {
            return "无";
        }

        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            String line;
            int currentLineNumber = 0;
            while ((line = reader.readLine()) != null) {
                currentLineNumber++;
                if (currentLineNumber == lineNumber) {
                    return line;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "无";
    }

    /**
     * 覆盖写入文件内容
     *
     * @param filePath 文件路径
     * @param content  要写入的内容
     * @throws IOException 如果写入文件时发生IO异常
     */
    public static void overwriteFile(String filePath, String content) throws IOException {
        try (FileWriter writer = new FileWriter(filePath)) {
            writer.write(content);
        }
    }
    /**
     * 追加写入文件内容
     *
     * @param filePath 文件路径
     * @param content  要追加的内容
     * @throws IOException 如果写入文件时发生IO异常
     */
    public static void appendToFile(String filePath, String content) throws IOException {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath, true))) {
            writer.write(content);
            writer.newLine(); // 在内容后添加新行，以便下次追加时内容不会紧挨着
        }
    }
    /**
     * 读取文件
     *
     * @param fileName 文件名
     * @return 文件内容
     * @throws IOException 如果发生I/O错误
     */
    public static String readFile(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
            StringBuilder content = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                content.append(line).append(System.lineSeparator());
            }
            // 去掉最后一个换行符
            if (content.length() > 0) {
                content.setLength(content.length() - System.lineSeparator().length());
            }
            return content.toString();
        }
    }

    // 测试主方法（可选）

}